﻿using System;
namespace Kis.Xroad.Eu {
    
    
    [System.SerializableAttribute()]
    public partial class SequenceArrayUserDefinedSTypeReferenced {
        
        private System.Collections.Generic.List<global::Kis.Xroad.Eu.WorkDay> @__simpleTypeReferenced = new System.Collections.Generic.List<global::Kis.Xroad.Eu.WorkDay>();
        
        private System.Collections.Generic.List<global::Kis.Xroad.Eu.WorkDay> @__simpleTypeReferenced2 = new System.Collections.Generic.List<global::Kis.Xroad.Eu.WorkDay>();
        
        private System.Collections.Generic.List<SequenceArrayUserDefinedSTypeReferenced.SimpleTypeInlineType> @__simpleTypeInline = new System.Collections.Generic.List<SequenceArrayUserDefinedSTypeReferenced.SimpleTypeInlineType>();
        
        private System.Collections.Generic.List<SequenceArrayUserDefinedSTypeReferenced.SimpleTypeInline2Type> @__simpleTypeInline2 = new System.Collections.Generic.List<SequenceArrayUserDefinedSTypeReferenced.SimpleTypeInline2Type>();
        
        public SequenceArrayUserDefinedSTypeReferenced() {
        }
        
        /// <summary>
        /// All parameters
        /// </summary>
        public SequenceArrayUserDefinedSTypeReferenced(System.Collections.Generic.List<global::Kis.Xroad.Eu.WorkDay> @simpleTypeReferenced, System.Collections.Generic.List<global::Kis.Xroad.Eu.WorkDay> @simpleTypeReferenced2, System.Collections.Generic.List<SequenceArrayUserDefinedSTypeReferenced.SimpleTypeInlineType> @simpleTypeInline, System.Collections.Generic.List<SequenceArrayUserDefinedSTypeReferenced.SimpleTypeInline2Type> @simpleTypeInline2) {
            this.@__simpleTypeReferenced = @simpleTypeReferenced;
            this.@__simpleTypeReferenced2 = @simpleTypeReferenced2;
            this.@__simpleTypeInline = @simpleTypeInline;
            this.@__simpleTypeInline2 = @simpleTypeInline2;
        }
        
        /// <summary>
        /// Copy Constructor
        /// </summary>
        protected SequenceArrayUserDefinedSTypeReferenced(SequenceArrayUserDefinedSTypeReferenced @sequenceArrayUserDefinedSTypeReferenced) {
            this.@__simpleTypeReferenced = @sequenceArrayUserDefinedSTypeReferenced.SimpleTypeReferenced;
            this.@__simpleTypeReferenced2 = @sequenceArrayUserDefinedSTypeReferenced.SimpleTypeReferenced2;
            this.@__simpleTypeInline = @sequenceArrayUserDefinedSTypeReferenced.SimpleTypeInline;
            this.@__simpleTypeInline2 = @sequenceArrayUserDefinedSTypeReferenced.SimpleTypeInline2;
        }
        
        public virtual System.Collections.Generic.List<global::Kis.Xroad.Eu.WorkDay> SimpleTypeReferenced {
            get {
                return this.@__simpleTypeReferenced;
            }
            set {
                this.@__simpleTypeReferenced = value;
            }
        }
        
        public virtual System.Collections.Generic.List<global::Kis.Xroad.Eu.WorkDay> SimpleTypeReferenced2 {
            get {
                return this.@__simpleTypeReferenced2;
            }
            set {
                this.@__simpleTypeReferenced2 = value;
            }
        }
        
        public virtual System.Collections.Generic.List<SequenceArrayUserDefinedSTypeReferenced.SimpleTypeInlineType> SimpleTypeInline {
            get {
                return this.@__simpleTypeInline;
            }
            set {
                this.@__simpleTypeInline = value;
            }
        }
        
        public virtual System.Collections.Generic.List<SequenceArrayUserDefinedSTypeReferenced.SimpleTypeInline2Type> SimpleTypeInline2 {
            get {
                return this.@__simpleTypeInline2;
            }
            set {
                this.@__simpleTypeInline2 = value;
            }
        }
        
        [System.SerializableAttribute()]
        public class SimpleTypeInlineType : global::Xtee.Core.Schema.XsdString {
            
            public const string EXECUTIVE = "Executive";
            
            public const string PARKATTENDANT = "ParkAttendant";
            
            public const string PROGRAMMER = "Programmer";
            
            public const string PROJECTMANAGER = "ProjectManager";
            
            public SimpleTypeInlineType(string value) : 
                    base(value) {
                this.Validate();
                string annot = null;
                if (Value == "Executive") {
                    annot = "Executive";
                }
                if (Value == "ParkAttendant") {
                    annot = "ParkAttendant";
                }
                if (Value == "Programmer") {
                    annot = "Programmer";
                }
                if (Value == "ProjectManager") {
                    annot = "ProjectManager";
                }
                if (annot!=null) {
                    this._annotation = annot;
                }
                else {
                    throw new global::Xtee.Core.Types.XteeSimpleTypeValidationException(string.Format("Enumeration on [{0}] does not allow value : [{1}] ", this.GetType().Name,Value.ToString()));;
                }
            }
            
            public SimpleTypeInlineType() : 
                    base(string.Empty) {
            }
            
            public static bool TryParse(string value, out SimpleTypeInlineType result) {
                try {
                    result = new SimpleTypeInlineType(value);
                    return true;
                }
                catch (System.Exception ) {
                    result = null;
                    return false;
                }
            }
            
            public static implicit operator String (SimpleTypeInlineType value) {
                return value.Value;
            }
            
            public static implicit operator SimpleTypeInlineType (string value) {
                if (value==null) {
                    return null;
                }
                return new SimpleTypeInlineType(value);
            }
        }
        
        [System.SerializableAttribute()]
        public class SimpleTypeInline2Type : global::Xtee.Core.Schema.XsdString {
            
            public const string EXECUTIVE = "Executive";
            
            public const string PARKATTENDANT = "ParkAttendant";
            
            public const string PROGRAMMER = "Programmer";
            
            public const string PROJECTMANAGER = "ProjectManager";
            
            public SimpleTypeInline2Type(string value) : 
                    base(value) {
                this.Validate();
                string annot = null;
                if (Value == "Executive") {
                    annot = "Executive";
                }
                if (Value == "ParkAttendant") {
                    annot = "ParkAttendant";
                }
                if (Value == "Programmer") {
                    annot = "Programmer";
                }
                if (Value == "ProjectManager") {
                    annot = "ProjectManager";
                }
                if (annot!=null) {
                    this._annotation = annot;
                }
                else {
                    throw new global::Xtee.Core.Types.XteeSimpleTypeValidationException(string.Format("Enumeration on [{0}] does not allow value : [{1}] ", this.GetType().Name,Value.ToString()));;
                }
            }
            
            public SimpleTypeInline2Type() : 
                    base(string.Empty) {
            }
            
            public static bool TryParse(string value, out SimpleTypeInline2Type result) {
                try {
                    result = new SimpleTypeInline2Type(value);
                    return true;
                }
                catch (System.Exception ) {
                    result = null;
                    return false;
                }
            }
            
            public static implicit operator String (SimpleTypeInline2Type value) {
                return value.Value;
            }
            
            public static implicit operator SimpleTypeInline2Type (string value) {
                if (value==null) {
                    return null;
                }
                return new SimpleTypeInline2Type(value);
            }
        }
    }
}
